BigQueryでGROUP BY ALLがプレビューになりました

BigQueryでGROUP BY ALLがプレビューになりました

Clock Icon2024.03.07

Google Cloudデータエンジニアのはんざわです
2024年2月26日にGROUP BYに関連して大きく2つのアップデートがありました。

BigQuery release notes: February 27, 2024

1つ目は、以前に紹介したGROUP BY GROUPING SETSなどの3つの関数が正式にGAになりました。

2つ目は、今回紹介するGROUP BY ALLが新たにプレビューとして追加されました。

本ブログでは、新しく追加されたGROUP BY ALLを実際に触ってみたいと思います!

そもそも GROUP BY ALL とは

簡単に説明するとSELECT句から集計関数などを除く全てのカラムでグループ化してくれる機能になります。
今までは、GROUP BY col1, col2, ...GROUP BY 1, 2, ... のような形で個別に指定する必要がありましたが、GROUP BY ALLが追加されてことで個別に指定する手間が省けるようになりました!

公式ドキュメント: Group rows by ALL

従来との比較

個別に指定する方法

SELECT
  word,
  COUNT(*) AS cnt
FROM
  samples_dataset.shakespeare
GROUP BY word
ORDER BY cnt DESC

個別に指定する方法では、仮にSELECT句で指定するカラムを増やした場合、グループ化するカラムも同様に増やす必要がありました。
仮に増やさなかった場合、以下のようなエラーが発生し、集計クエリが実行できなくなってしまいます。

SELECT list expression references column <カラム名> which is neither grouped nor aggregated

GROUP BY ALLを使った方法

SELECT
  word,
  COUNT(*) AS cnt
FROM
  samples_dataset.shakespeare
GROUP BY ALL
ORDER BY cnt DESC

一方で、GROUP BY ALLを使った方法では、SELECT句で指定するカラムをいくら増やしても何もせずに正常に実行することが可能です。
もちろん、それぞれの方法で取得した集計結果は同じになります。

まとめ

この記事では、GROUP BY ALLを簡単に紹介しました。
今回の例のようにグループ化したいカラムが少ない場合は恩恵を感じにくいかもしれません。
一方でグループ化したいカラムが多いケースやSELECT句で指定するカラムを動的に変更させたいケースでは非常に有効な機能だと思います。

是非、そのようなケースに直面した際には利用を検討してみてください!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.